/**
 * 文件上传预览组件类型定义
 */

/** 文件上传状态枚举 */
export enum FileUploadStatus {
	Ready = 'ready',
	Uploading = 'uploading',
	Success = 'success',
	Failed = 'failed'
}

/** 扩展的文件信息接口 */
export interface ExtendedFileInfo {
	/** 文件唯一标识 */
	uid: string | number
	/** 文件名 */
	name?: string
	/** 文件大小 */
	size?: number
	/** 文件类型 */
	type?: string
	/** 预览URL */
	url?: string
	/** 原始文件对象 */
	raw?: File
	/** 上传状态 */
	status: FileUploadStatus
	/** 上传进度 0-100 */
	progress?: number
	/** 上传成功后的文件ID */
	fileId?: number
	/** 错误信息 */
	errorMessage?: string
}

/** 文件上传参数接口 */
export interface UploadParams {
	/** 所属系统编码 */
	sysCode: string
	/** 业务类型编码 */
	businessCode?: string
}

/** 组件Props接口 */
export interface FileUploadPreviewProps {
	/** 占位图片地址 */
	placeholderSrc: string
	/** 预览区宽度 */
	width: string | number
	/** 预览区高度 */
	height: string | number
	/** 接受的文件类型 */
	accept?: string
	/** 文件大小限制(MB) */
	maxSize?: number
	/** 是否禁用 */
	disabled?: boolean
	/** 最大上传数量 */
	maxCount?: number
	/** 是否支持多选 */
	multiple?: boolean
	/** 初始文件ID列表 - 用于展示已存在的文件 */
	fileIds?: number[]
	/** 文件上传参数 */
	uploadParams?: UploadParams
}

/** 组件事件接口 */
export interface FileUploadPreviewEmits {
	/** 文件变化事件 */
	(event: 'fileChange', fileIds: number[]): void
	/** 删除确认事件 */
	(event: 'deleteConfirm', index: number): void
	/** 文件上传成功事件，传递原始File对象 */
	(event: 'fileUploaded', data: { fileId: number; file: File }[]): void
}
